<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="ARiV2" id="ARiV2"><span data-lake-id="u18eb78ba" id="u18eb78ba">典型回答</span></h1>
  <p data-lake-id="ucb7041f6" id="ucb7041f6"><br></p>
  <p data-lake-id="u257d997c" id="u257d997c"><span data-lake-id="u7a37f94d" id="u7a37f94d">在Web应用开发中，确保应用可以平稳可靠的关闭是至关重要的。在我们常用的Spring Boot中其实提供了内置功能来优雅地处理应用程序的关闭的能力。</span></p>
  <p data-lake-id="u86b5c47b" id="u86b5c47b"><span data-lake-id="u2386f05d" id="u2386f05d">​</span><br></p>
  <p data-lake-id="ua487b5fe" id="ua487b5fe"><span data-lake-id="ueda967b2" id="ueda967b2">先说一下啥事优雅停机，其实他指的是以受控方式终止应用程序的过程，允许它完成任何正在进行的任务，释放资源，并确保数据的完整性。与突然终止应用程序不同，优雅停机确保所有进程都得到优雅停止，以防止潜在的数据损坏或丢失。</span></p>
  <p data-lake-id="u9ddf5247" id="u9ddf5247"><span data-lake-id="uc55db3c2" id="uc55db3c2"><br>
    从Spring Boot 2.3开始，SpringBoot内置了优雅停机的功能。想要启用优雅停机也非常简单，你只需在你的application.properties文件中添加一行代码：</span></p>
  <p data-lake-id="u28c859eb" id="u28c859eb"><span data-lake-id="u27dcc983" id="u27dcc983">​</span><br></p>
  <pre lang="java"><code>
server.shutdown=graceful
</code></pre>
  <p data-lake-id="u64f23866" id="u64f23866"><br></p>
  <p data-lake-id="ub45b5598" id="ub45b5598"><span data-lake-id="ud05d5622" id="ud05d5622">通过这个设置，当你停止服务器时，它将不再接受新的请求。并且服务器也不会立即关闭，而是等待正在进行的请求处理完。</span></p>
  <p data-lake-id="ubdbad71d" id="ubdbad71d"><span data-lake-id="u333efc83" id="u333efc83">​</span><br></p>
  <p data-lake-id="uc8b77579" id="uc8b77579"><span data-lake-id="uf767cdbb" id="uf767cdbb">这个等待的时间我们是可以自定义的：</span></p>
  <p data-lake-id="u87b30845" id="u87b30845"><span data-lake-id="u06314196" id="u06314196">​</span><br></p>
  <pre lang="java"><code>
spring.lifecycle.timeout-per-shutdown-phase=2m
</code></pre>
  <p data-lake-id="u1eaf8482" id="u1eaf8482"><br></p>
  <p data-lake-id="u5aac660c" id="u5aac660c"><span data-lake-id="u1049d6af" id="u1049d6af">默认的等待时长是30秒，我们通过以上配置可以将这个等待时长延长直2分钟。</span></p>
  <p data-lake-id="u4911cae0" id="u4911cae0"><span data-lake-id="u1903792b" id="u1903792b">​</span><br></p>
  <h1 data-lake-id="hbHRS" id="hbHRS"><span data-lake-id="u4135811d" id="u4135811d">扩展知识</span></h1>
  <p data-lake-id="u6b706933" id="u6b706933"><br></p>
  <h2 data-lake-id="qV54w" id="qV54w"><span data-lake-id="u20a98f0b" id="u20a98f0b" style="color: rgb(0, 0, 0)">Spring Boot Actuator Shutdown Endpoint</span></h2>
  <p data-lake-id="u5f59eae7" id="u5f59eae7"><br></p>
  <p data-lake-id="uf58acf77" id="uf58acf77"><span data-lake-id="ubf03dc36" id="ubf03dc36">想要在</span><span data-lake-id="u4bf1696e" id="u4bf1696e" style="color: rgb(0, 0, 0)">Spring Boot Actuator中启用优雅停机，需要做如下配置。</span></p>
  <p data-lake-id="u1646c352" id="u1646c352"><span data-lake-id="uf0ef5bbd" id="uf0ef5bbd" style="color: rgb(0, 0, 0)">​</span><br></p>
  <p data-lake-id="u83ce1087" id="u83ce1087"><span data-lake-id="u88d50a12" id="u88d50a12" style="color: rgb(0, 0, 0)">首先增加Maven依赖：</span></p>
  <p data-lake-id="u63b01a08" id="u63b01a08"><span data-lake-id="ue7168571" id="ue7168571" style="color: rgb(0, 0, 0)">​</span><br></p>
  <pre lang="java"><code>
&lt;dependency&gt;
  &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  &lt;artifactId&gt;spring-boot-starter-actuator&lt;/artifactId&gt;
&lt;/dependency&gt;
</code></pre>
  <p data-lake-id="u55470140" id="u55470140"><br></p>
  <p data-lake-id="ubec8d6f9" id="ubec8d6f9"><span data-lake-id="uf9b2c0f7" id="uf9b2c0f7">然后增加配置项，</span></p>
  <p data-lake-id="u9527d005" id="u9527d005"><span data-lake-id="u50a1876f" id="u50a1876f">​</span><br></p>
  <pre lang="java"><code>
management.endpoints.web.exposure.include=*
management.endpoint.shutdown.enabled=true
</code></pre>
  <p data-lake-id="ua0e77c42" id="ua0e77c42"><br></p>
  <p data-lake-id="ua8584696" id="ua8584696"><span data-lake-id="uda837c1a" id="uda837c1a">要优雅停机应用，可以使用HTTP POST请求来调用关闭端点。例如，可以使用curl命令或工具来发送POST请求：</span></p>
  <p data-lake-id="u939d9ee4" id="u939d9ee4"><span data-lake-id="u7df2a928" id="u7df2a928">​</span><br></p>
  <pre lang="java"><code>
curl -X POST http://localhost:8080/actuator/shutdown
</code></pre>
  <p data-lake-id="u0c4a35b5" id="u0c4a35b5"><br></p>
  <p data-lake-id="udd0df53d" id="udd0df53d"><span data-lake-id="u8e5c1c4d" id="u8e5c1c4d">当你发送POST请求到/actuator/shutdown时，应用将接收到关闭命令并开始进行优雅停机。应用会等待一段时间以完成正在进行的请求处理，然后关闭。</span></p>
 </body>
</html>